package com.cn.wanxi.servlet;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cn.wanxi.model.ResultModel;
import com.cn.wanxi.model.UserModel;
import com.cn.wanxi.service.UserService;
import com.cn.wanxi.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 2021-9-14
 * servlet 里面需要写哪些代码？
 * 1.乱码处理
 * 2.得到前端传递过来的数据
 * 3.封装对象model
 * 4.跳转service层，得到返回值对象
 * 5.将返回值对象传递给前端（json对象）
 */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    /**
     * doget和dopost的区别？
     *
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
//    @Override
//    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println("get");
//        resp.getWriter().print("getget");
//    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        System.out.println(111);
//        重定向页面,,jsp需要重定向
//        或者页面转发，js不需要了，只需要返回数据
//        form表单直接条件一般用于jsp，如果用js或者ajax提交数据一般用于html文件
//        resp.getWriter().print(222);
//        resp.sendRedirect("/html/login.html");
//        1.乱码处理
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
//前端的值,这里的code对应前端的对象的key值
//        2.得到前端传递过来的数据
        String code = req.getParameter("code");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String sessionCode = (String) req.getSession().getAttribute("code");//后端的值
//        3.封装对象model
        UserModel userModel = new UserModel();
        userModel.setCode(code);
        userModel.setUsername(username);
        userModel.setPassword(password);
        userModel.setSessionCode(sessionCode);
//        req.setAttribute("","");//四大作用域
//        判断当前验证码是否和服务器的验证码是否一致，如果不一致，则反馈给前端
//     逻辑处理应该放在服务逻辑层
//        4.跳转service层，得到返回值对象
        UserService userService = new UserServiceImpl();
        ResultModel resultModel = userService.login(userModel);
        if ("success".equals(resultModel.getMsg())) {
            req.getSession().setAttribute(username, username);
        }
//        5.将返回值对象传递给前端（json对象）
        resp.getWriter().print(JSONObject.toJSONString(resultModel));
    }

    public static void main(String[] args) {
//        UserModel userModel = new UserModel();
//        System.out.println(userModel);
    }
}

